/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * PersonaPresentacion.java
 *
 * Created on 10-ago-2010, 18:31:14
 */

package presentacion.persona;

import presentacion.comun.ComunPersonaPresentacion;
import com.toedter.calendar.IDateEditor;
import hibernate.objeto.Persona;
import logica.PersonaLogica;
import logica.validacion.PersonaValidacion;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Date;
import javax.swing.JOptionPane;
import logica.CapaLogica;
import presentacion.CapaPresentacion;
import presentacion.utilidad.maquetado.Fuente;
import presentacion.utilidad.maquetado.Icono;
import presentacion.utilidad.maquetado.InformeError;
import presentacion.utilidad.MensajePresentacion;

/**
 *
 * @author Administrador
 */
public class PersonaPresentacion extends javax.swing.JDialog {

    /** Creates new form PersonaPresentacion.
     */
    public PersonaPresentacion(java.awt.Frame parent, boolean modal,
            Persona unaPersona) {
        super(parent, modal);

        persona = unaPersona;
        
        initComponents();
        personalizarJDialog();
        setLocationRelativeTo(null);
        setearEventosQueCapturanTeclaEnterYEscape();
    }

    /**
     * Setea datos de la ventana.
     *
     */
    private void personalizarJDialog() {
        if (persona.getNumeroDeDocumentoPersona() != null) {
            this.setTitle("Modificar Persona");
            exhibirDatosEnPantalla();
        } else {
            this.setTitle("Agregar Persona");
        }
    }

    /**
     * En caso de que se trate de la modificación de una persona, se cargan
     * los datos de la misma en los distintos campos de la pantalla.
     *
     */
    private void exhibirDatosEnPantalla() {
        //Seteo de documento
        tipoDeDocumentoPersona.setSelectedIndex(
                CapaPresentacion.getIndiceComboBoxPorString(
                persona.getTipoDeDocumentoPersona(),
                tipoDeDocumentoPersona));
        numeroDeDocumentoPersona.setText(
                persona.getNumeroDeDocumentoPersona());
        numeroDeDocumentoPersona.setCaretPosition(0);
        //Seteo de nombre
        nombrePersona.setText(persona.getNombrePersona());
        nombrePersona.setCaretPosition(0);
        //Seteo de apellido
        apellidoPersona.setText(persona.getApellidoPersona());
        apellidoPersona.setCaretPosition(0);
        //Seteo de teléfonos
        telefonoParticularPersona.setText(
                persona.getTelefonoParticularPersona());
        telefonoParticularPersona.setCaretPosition(0);
        telefonoMovilPersona.setText(
                persona.getTelefonoMovilPersona());
        telefonoMovilPersona.setCaretPosition(0);
        //Seteo de fecha de nacimiento
        fechaDeNacimientoPersona.setDate(
                persona.getFechaDeNacimientoPersona());
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        textoDescriptivoVentana = new javax.swing.JLabel();
        panelPersona = new javax.swing.JPanel();
        textoTipoDeDocumentoPersona = new javax.swing.JLabel();
        tipoDeDocumentoPersona = new javax.swing.JComboBox();
        textoNumeroDeDocumentoPersona = new javax.swing.JLabel();
        numeroDeDocumentoPersona = new javax.swing.JTextField();
        nombrePersona = new javax.swing.JTextField();
        apellidoPersona = new javax.swing.JTextField();
        textoNombrePersona = new javax.swing.JLabel();
        textoApellidoPersona = new javax.swing.JLabel();
        textoFechaNacimientoPersona = new javax.swing.JLabel();
        fechaDeNacimientoPersona = new com.toedter.calendar.JDateChooser();
        textoTelefonoParticularPersona = new javax.swing.JLabel();
        telefonoParticularPersona = new javax.swing.JTextField();
        telefonoMovilPersona = new javax.swing.JTextField();
        textoTelefonoMovilPersona = new javax.swing.JLabel();
        botonCancelar = new javax.swing.JButton();
        botonAceptar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Agregar Persona");
        setMinimumSize(new java.awt.Dimension(499, 309));

        textoDescriptivoVentana.setFont(Fuente.FUENTE_TITULO_2);
        textoDescriptivoVentana.setForeground(Fuente.COLOR_NORMAL);
        textoDescriptivoVentana.setText("Ingrese los datos de la persona");
        textoDescriptivoVentana.setPreferredSize(new java.awt.Dimension(463, 20));

        panelPersona.setMinimumSize(new java.awt.Dimension(462, 197));

        textoTipoDeDocumentoPersona.setForeground(Fuente.COLOR_NORMAL);
        textoTipoDeDocumentoPersona.setText("Tipo documento");
        textoTipoDeDocumentoPersona.setPreferredSize(new java.awt.Dimension(95, 20));

        tipoDeDocumentoPersona.setFont(Fuente.FUENTE_COMBOBOX);
        tipoDeDocumentoPersona.setForeground(Fuente.COLOR_NORMAL);
        tipoDeDocumentoPersona.setModel(CapaPresentacion.getListaDeTipoDeDocumento());
        tipoDeDocumentoPersona.setPreferredSize(new java.awt.Dimension(110, 20));

        textoNumeroDeDocumentoPersona.setFont(Fuente.FUENTE_LABEL);
        textoNumeroDeDocumentoPersona.setForeground(Fuente.COLOR_NORMAL);
        textoNumeroDeDocumentoPersona.setText("Número documento");
        textoNumeroDeDocumentoPersona.setPreferredSize(new java.awt.Dimension(95, 20));

        numeroDeDocumentoPersona.setFont(Fuente.FUENTE_TEXTFIELD);
        numeroDeDocumentoPersona.setForeground(Fuente.COLOR_NORMAL);
        numeroDeDocumentoPersona.setPreferredSize(new java.awt.Dimension(110, 20));

        nombrePersona.setFont(Fuente.FUENTE_TEXTFIELD);
        nombrePersona.setForeground(Fuente.COLOR_NORMAL);
        nombrePersona.setPreferredSize(new java.awt.Dimension(344, 20));

        apellidoPersona.setFont(Fuente.FUENTE_TEXTFIELD);
        apellidoPersona.setForeground(Fuente.COLOR_NORMAL);
        apellidoPersona.setPreferredSize(new java.awt.Dimension(344, 20));

        textoNombrePersona.setFont(Fuente.FUENTE_LABEL);
        textoNombrePersona.setForeground(Fuente.COLOR_NORMAL);
        textoNombrePersona.setText("Nombre");
        textoNombrePersona.setPreferredSize(new java.awt.Dimension(95, 20));

        textoApellidoPersona.setFont(Fuente.FUENTE_LABEL);
        textoApellidoPersona.setForeground(Fuente.COLOR_NORMAL);
        textoApellidoPersona.setText("Apellido");
        textoApellidoPersona.setPreferredSize(new java.awt.Dimension(95, 20));

        textoFechaNacimientoPersona.setFont(Fuente.FUENTE_LABEL);
        textoFechaNacimientoPersona.setForeground(Fuente.COLOR_NORMAL);
        textoFechaNacimientoPersona.setText("Fecha nacimiento");
        textoFechaNacimientoPersona.setPreferredSize(new java.awt.Dimension(95, 20));

        fechaDeNacimientoPersona.setToolTipText("");
        fechaDeNacimientoPersona.setMaxSelectableDate(new Date());
        fechaDeNacimientoPersona.setMinSelectableDate(new java.util.Date(-2208985673000L));
        fechaDeNacimientoPersona.setPreferredSize(new java.awt.Dimension(144, 20));

        textoTelefonoParticularPersona.setFont(Fuente.FUENTE_LABEL);
        textoTelefonoParticularPersona.setForeground(Fuente.COLOR_NORMAL);
        textoTelefonoParticularPersona.setText("Teléfono particular");
        textoTelefonoParticularPersona.setPreferredSize(new java.awt.Dimension(95, 20));

        telefonoParticularPersona.setFont(Fuente.FUENTE_TEXTFIELD);
        telefonoParticularPersona.setForeground(Fuente.COLOR_NORMAL);
        telefonoParticularPersona.setPreferredSize(new java.awt.Dimension(344, 20));

        telefonoMovilPersona.setFont(Fuente.FUENTE_TEXTFIELD);
        telefonoMovilPersona.setForeground(Fuente.COLOR_NORMAL);
        telefonoMovilPersona.setPreferredSize(new java.awt.Dimension(344, 20));

        textoTelefonoMovilPersona.setFont(Fuente.FUENTE_LABEL);
        textoTelefonoMovilPersona.setForeground(Fuente.COLOR_NORMAL);
        textoTelefonoMovilPersona.setText("Teléfono móvil");
        textoTelefonoMovilPersona.setPreferredSize(new java.awt.Dimension(95, 20));

        javax.swing.GroupLayout panelPersonaLayout = new javax.swing.GroupLayout(panelPersona);
        panelPersona.setLayout(panelPersonaLayout);
        panelPersonaLayout.setHorizontalGroup(
            panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelPersonaLayout.createSequentialGroup()
                        .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(textoTipoDeDocumentoPersona, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoNombrePersona, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(panelPersonaLayout.createSequentialGroup()
                                .addComponent(tipoDeDocumentoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(24, 24, 24)
                                .addComponent(textoNumeroDeDocumentoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(numeroDeDocumentoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(nombrePersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(panelPersonaLayout.createSequentialGroup()
                        .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(textoFechaNacimientoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoTelefonoParticularPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoApellidoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoTelefonoMovilPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(fechaDeNacimientoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(telefonoMovilPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(telefonoParticularPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(apellidoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelPersonaLayout.setVerticalGroup(
            panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelPersonaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoTipoDeDocumentoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(tipoDeDocumentoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(numeroDeDocumentoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textoNumeroDeDocumentoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(textoNombrePersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(nombrePersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(panelPersonaLayout.createSequentialGroup()
                        .addComponent(textoApellidoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(textoFechaNacimientoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(textoTelefonoParticularPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(panelPersonaLayout.createSequentialGroup()
                        .addComponent(apellidoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(fechaDeNacimientoPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(telefonoParticularPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(panelPersonaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(telefonoMovilPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(textoTelefonoMovilPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        botonCancelar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonCancelar.setForeground(Fuente.COLOR_NORMAL);
        botonCancelar.setIcon(Icono.ICONO_16_CANCELAR);
        botonCancelar.setText("Cancelar");
        botonCancelar.setToolTipText("Cancela la operación");
        botonCancelar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        botonAceptar.setFont(Fuente.FUENTE_BOTON_EXTERNO);
        botonAceptar.setForeground(Fuente.COLOR_NORMAL);
        botonAceptar.setIcon(Icono.ICONO_16_ACEPTAR);
        botonAceptar.setText("Aceptar");
        botonAceptar.setToolTipText("Agrega la persona");
        botonAceptar.setPreferredSize(new java.awt.Dimension(110, 23));
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(panelPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(247, Short.MAX_VALUE)
                .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(textoDescriptivoVentana, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelPersona, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
}//GEN-LAST:event_botonCancelarActionPerformed

    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        agregarOModificarPersona();
}//GEN-LAST:event_botonAceptarActionPerformed
//GEN-FIRST:event_tipoDeDocumentoPersonalFocusLost
//GEN-LAST:event_tipoDeDocumentoPersonalFocusLost
//GEN-FIRST:event_numeroDeDocumentoPersonalFocusLost
//GEN-LAST:event_numeroDeDocumentoPersonalFocusLost
//GEN-FIRST:event_fechaDeNacimientoPersonalPropertyChange
//GEN-LAST:event_fechaDeNacimientoPersonalPropertyChange
    /**
     * Agrega/modifica una persona a la base de datos.
     *
     * @return true si lo agregó/modificó correctamente, false en caso contrario
     */
    private void agregarOModificarPersona() {
        //Si el documento no existe en la bd
        if (esPersonaUnica()) {
            //Valida los campos
            if (validarCamposPersona()) {
                //Carga toda la información de la pantalla
                recopilarInformacion();
                //Confirmar modificación
                if (confirmarModificacion()) {
                    boolean agregarOModificar = seDebeReasigar();
                    if (agregarOModificar) {
                        //Agrega/modifica la persona
                        if (PersonaLogica.agregarOModificarPersona(datosPersona,
                                persona, new int[1])) {
                            this.dispose();
                        }
                    }
                }
                // Errores
            } else {
                MensajePresentacion.errorDatosInvalidos();
            }
        } else {
            MensajePresentacion.errorDuplicidadObjeto("La persona");
        }
    }

    /**
     * Si se está modificando la fecha de nacimieto de la persona, la cual es
     * contacto de paciente/s, debe reasignarse otra/s persona como contacto
     * de lo/s paciente/s en caso de que se convierta en menor de edad.
     *
     */
    private boolean seDebeReasigar() {
        Date fechaDeNacimientoAnterior = new Date();
        boolean reasignacionExitosa = false;

        //Se debe reasignar siempre y cuando se trate de modificacion
        if (persona != null) {
            fechaDeNacimientoAnterior =
                    persona.getFechaDeNacimientoPersona();
        }

        Persona personaTemporal = persona;
        personaTemporal.setFechaDeNacimientoPersona(
                fechaDeNacimientoPersona.getDate());

        int opcion = MensajePresentacion.confirmarMenorDeEdad(personaTemporal);

        persona.setFechaDeNacimientoPersona(fechaDeNacimientoAnterior);

        //Si se confirma la modificación debe reasignarse contacto
        if (opcion == 0) {
            reasignacionExitosa = ComunPersonaPresentacion.
                    reasignarContactoAPaciente(persona);
        }

        //Esto es para decidir si se sigue adelante en el proceso de alta/modficación de persona
        if (opcion == -1 || (opcion == 0 && reasignacionExitosa)) {
            return true;
        } else {
            //Con 1 o 2 se cancela la modificación de la persona
            return false;
        }
    }    

    /**
     * Recopila los datos de la persona a agregar/modificar.
     *
     */
    private void recopilarInformacion() {
        datosPersona = new Object[16];

        datosPersona[CapaLogica.PERSONA_TIPO_DE_DOCUMENTO] =
                tipoDeDocumentoPersona.getSelectedItem().toString();

        datosPersona[CapaLogica.PERSONA_NUMERO_DE_DOCUMENTO] =
                numeroDeDocumentoPersona.getText();

        datosPersona[CapaLogica.PERSONA_NOMBRE] =
                nombrePersona.getText();

        datosPersona[CapaLogica.PERSONA_APELLIDO] =
                apellidoPersona.getText();

        datosPersona[CapaLogica.PERSONA_FECHA_DE_NACIMIENTO] =
                fechaDeNacimientoPersona.getDate();

        datosPersona[CapaLogica.PERSONA_TELEFONO_PARTICULAR] =
                telefonoParticularPersona.getText();

        datosPersona[CapaLogica.PERSONA_TELEFONO_MOVIL] =
                telefonoMovilPersona.getText();

        datosPersona[CapaLogica.PERSONA_CORREO_ELECTRONICO] =
                "";
    }

    /**
     * Valida los campos ingresados
     *
     * @return true si los campos estan listos para cargarse, false en caso
     * contrario
     */
    private boolean validarCamposPersona() {
        boolean esDocumentoValido = true;
        boolean esNombreValido = true;
        boolean esApellidoValido = true;
        boolean esTelefonoParticularValido = true;
        boolean esTelefonoMovilValido = true;
        boolean esFechaNacimientoValid = true;

        //Manejo de la validación del documento
        if (!PersonaValidacion.validarDocumento(
                tipoDeDocumentoPersona.getSelectedItem().toString(),
                numeroDeDocumentoPersona.getText(), true)) {
            esDocumentoValido = false;
            textoTipoDeDocumentoPersona.setForeground(
                    Fuente.COLOR_ERROR);
            textoNumeroDeDocumentoPersona.setForeground(
                    Fuente.COLOR_ERROR);
            textoNumeroDeDocumentoPersona.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_NUMERO_DOCUMENTO);
            textoTipoDeDocumentoPersona.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_TIPO_DOCUMENTO);
        } else {
            esDocumentoValido = true;
            textoTipoDeDocumentoPersona.setForeground(Fuente.COLOR_NORMAL);
            textoNumeroDeDocumentoPersona.setForeground(Fuente.COLOR_NORMAL);
            textoNumeroDeDocumentoPersona.setToolTipText(null);
            textoTipoDeDocumentoPersona.setToolTipText(null);
        }

        //Manejo de la validación de nombre
        if (!PersonaValidacion.validarNombre(
                nombrePersona.getText(), true)) {
            textoNombrePersona.setForeground(
                    Fuente.COLOR_ERROR);
            textoNombrePersona.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_NOMBRE);
            esNombreValido = false;
        } else {
            textoNombrePersona.setForeground(Fuente.COLOR_NORMAL);
            textoNombrePersona.setToolTipText(null);
            esNombreValido = true;
        }

        //Manejo de la validación de apellido
        if (!PersonaValidacion.validarApellido(
                apellidoPersona.getText(), true)) {
            textoApellidoPersona.setForeground(
                    Fuente.COLOR_ERROR);
            textoApellidoPersona.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_APELLIDO);
            esApellidoValido = false;
        } else {
            textoApellidoPersona.setForeground(Fuente.COLOR_NORMAL);
            textoApellidoPersona.setToolTipText(null);
            esApellidoValido = true;
        }

        //Manejo de la validación de fecha
        if (!PersonaValidacion.validarFecha(
                fechaDeNacimientoPersona.getDate(), "", true)) {
            textoFechaNacimientoPersona.setForeground(
                    Fuente.COLOR_ERROR);
            textoFechaNacimientoPersona.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_FECHA);
            esFechaNacimientoValid = false;
        } else {
            textoFechaNacimientoPersona.setForeground(Fuente.COLOR_NORMAL);
            textoFechaNacimientoPersona.setToolTipText(null);
            esFechaNacimientoValid = true;
        }

        //Manejo de la validación de teléfono particular
        if (!PersonaValidacion.validarTelefono(
                telefonoParticularPersona.getText(), true)) {
            textoTelefonoParticularPersona.setForeground(
                    Fuente.COLOR_ERROR);
            textoTelefonoParticularPersona.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_NUMERO_TELEFONO);
            esTelefonoParticularValido = false;
        } else {
            textoTelefonoParticularPersona.setForeground(Fuente.COLOR_NORMAL);
            textoTelefonoParticularPersona.setToolTipText(null);
            esTelefonoParticularValido = true;
        }

        //Manejo de la validación de teléfono movil
        if (!PersonaValidacion.validarTelefono(
                telefonoMovilPersona.getText(), false)) {
            textoTelefonoMovilPersona.setForeground(
                    Fuente.COLOR_ERROR);
            textoTelefonoMovilPersona.setToolTipText(
                    InformeError.INFORME_ERROR_USO_COMUN_NUMERO_TELEFONO);
            esTelefonoMovilValido = false;
        } else {
            textoTelefonoMovilPersona.setForeground(Fuente.COLOR_NORMAL);
            textoTelefonoMovilPersona.setToolTipText(null);
            esTelefonoMovilValido = true;
        }

    return (esFechaNacimientoValid && esDocumentoValido &&
            esNombreValido && esApellidoValido &&
            esTelefonoParticularValido && esTelefonoMovilValido);
    }

    /**
     * Verifica que no exista otra persona cargada con el mismo documento.
     * (tipo y número). No se verifica si se reingresa el mismo documento.
     *
     * @return true si es único, false en caso contrario
     */
    private boolean esPersonaUnica() {
        //En caso de modificación, se verifica si no se cambió el documento
        if (persona.getNumeroDeDocumentoPersona() != null &&
                persona.getTipoDeDocumentoPersona().equalsIgnoreCase(
                tipoDeDocumentoPersona.getSelectedItem().toString()) &&
                persona.getNumeroDeDocumentoPersona().equals(
                numeroDeDocumentoPersona.getText())) {
            return true;
        } else {
            return (!PersonaLogica.existePersonaPorDocumentoEnBd(
                    tipoDeDocumentoPersona.getSelectedItem().toString(),
                    numeroDeDocumentoPersona.getText()));
        }
    }

    /**
     * Retorna el objeto persona.
     *
     * @return La persona
     */
    public static Persona getPersona() {
        return persona;
    }

    /**
     * En caso de tratarse de una madificación debe verificarse que realmente
     * se quiera modificar.
     *
     * @return true si se debe modificar, false en caso contrario
     */
    public boolean confirmarModificacion() {
        boolean retorno = false;
        if (persona.getApellidoPersona() != null) {
            //Confirmar modificación
            int confirmado = MensajePresentacion.confimarModificacionObjeto(
                    "persona", "la");
            if (JOptionPane.OK_OPTION == confirmado) {
                retorno = true;
            } else {
                retorno = false;
            }
        } else {
            retorno = true;
        }

        return retorno;
    }

    /**
     * Setea en cada componente del JDialog los eventos que capturarán la tecla
     * enter y escape.
     */
    private void setearEventosQueCapturanTeclaEnterYEscape() {
        //Declaración del evento a capturar
        KeyListener keyListenerEnter = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    agregarOModificarPersona();
                }
            }
        };
        //Declaración del evento a capturar
        KeyListener keyListenerEscape = new KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                if (evt.getKeyCode() == KeyEvent.VK_ESCAPE) {
                    //Llamada al método que capturará el boton enter y
                    //trabajará sobre el mismo
                    dispose();
                }
            }
        };
        //Setear eventos
        numeroDeDocumentoPersona.addKeyListener(keyListenerEnter);
        numeroDeDocumentoPersona.addKeyListener(keyListenerEscape);
        nombrePersona.addKeyListener(keyListenerEnter);
        nombrePersona.addKeyListener(keyListenerEscape);
        apellidoPersona.addKeyListener(keyListenerEnter);
        apellidoPersona.addKeyListener(keyListenerEscape);
        telefonoParticularPersona.addKeyListener(keyListenerEnter);
        telefonoParticularPersona.addKeyListener(keyListenerEscape);
        telefonoMovilPersona.addKeyListener(keyListenerEnter);
        telefonoMovilPersona.addKeyListener(keyListenerEscape);

        tipoDeDocumentoPersona.addKeyListener(keyListenerEnter);
        tipoDeDocumentoPersona.addKeyListener(keyListenerEscape);

        ((IDateEditor) fechaDeNacimientoPersona.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);
        ((IDateEditor) fechaDeNacimientoPersona.getDateEditor()).
                getUiComponent().addKeyListener(keyListenerEscape);

        botonAceptar.addKeyListener(keyListenerEscape);
        botonCancelar.addKeyListener(keyListenerEscape);
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JTextField apellidoPersona;
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonCancelar;
    private com.toedter.calendar.JDateChooser fechaDeNacimientoPersona;
    private javax.swing.JTextField nombrePersona;
    private javax.swing.JTextField numeroDeDocumentoPersona;
    private javax.swing.JPanel panelPersona;
    private javax.swing.JTextField telefonoMovilPersona;
    private javax.swing.JTextField telefonoParticularPersona;
    private javax.swing.JLabel textoApellidoPersona;
    private javax.swing.JLabel textoDescriptivoVentana;
    private javax.swing.JLabel textoFechaNacimientoPersona;
    private javax.swing.JLabel textoNombrePersona;
    private javax.swing.JLabel textoNumeroDeDocumentoPersona;
    private javax.swing.JLabel textoTelefonoMovilPersona;
    private javax.swing.JLabel textoTelefonoParticularPersona;
    private javax.swing.JLabel textoTipoDeDocumentoPersona;
    private javax.swing.JComboBox tipoDeDocumentoPersona;
    // End of variables declaration//GEN-END:variables
    private static Persona persona;
    private Object[] datosPersona;
}
